package userServer

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"net/http"
	"server/Logic"
	"server/middleWare"
	"server/response"
	"server/servers"
	"strconv"
)

type Version struct {
	Version string `json:"version"`
}

func UserServer(port string) {

	r := gin.Default()
	r.Use(middleWare.CORS())
	// 定义一个端点来获取版本信息
	r.GET("/getVersion", func(ctx *gin.Context) {
		serverVersion := viper.GetString("datasource.version")

		// 设置CORS头部，允许来自任何源的请求

		// 返回服务器版本号
		ctx.JSON(http.StatusOK, Version{Version: serverVersion})
	})
	// 拿到用户名密码之后验证进行游戏登录
	r.GET("/loginGame", func(ctx *gin.Context) {

		a := ctx.Query("account")
		p := ctx.Query("password")
		pd, user := Logic.VerifyPassword(ctx, a, p)
		if pd {
			response.Success(ctx, gin.H{"user": user}, "登录成功")
			fmt.Println("登陆成功")
		} else {
			response.Fail(ctx, nil, "登录失败")
			fmt.Println("登录失败")
		}

	})

	// 创建新账号
	r.GET("/register", func(ctx *gin.Context) {
		a := ctx.Query("account")
		p := ctx.Query("password")
		if Logic.JudgeAccount(a) {
			response.Fail(ctx, gin.H{"account:": a}, "账号已经存在")

			fmt.Println("账号已经存在")
			return
		} else {
			Logic.CreatAccount(ctx, a, p)
		}
	})

	// 创建新角色
	r.GET("/createRole", func(ctx *gin.Context) {
		acc := ctx.Query("account")
		name := ctx.Query("username")

		sex, _ := strconv.Atoi(ctx.Query("sex"))
		user, err, number := servers.Svc.UserModel.SelectByAccount(acc)
		if number == 0 {
			response.Fail(ctx, nil, "用户不存在")
		}
		//使用 username + #userid 算法解决重名问题
		name = name + "#" + strconv.Itoa(user.Id)
		if err != nil {
			response.Fail(ctx, nil, "查找该账户时出现异常")
		}

		err = Logic.UpdateInfo(acc, name, sex)

		if err != nil {
			fmt.Println(err)
			response.Fail(ctx, nil, "修改用户信息出现问题")
			return
		}

		response.Success(ctx, gin.H{"name": name, "sex": sex}, "用户信息修改成功")

	})
	// 启动服务器
	r.Run(":" + port)
}
